package j.s.code.jsnippets.ring;


/**
 * 循环数组
 * 数组长度必须是2的幂 && 不能等于0
 * 对一个long型整数对数组长度进行取模，得到的值就是数组的下标，使用此下标可以存取数组的值
 * @author love
 */
public class Ring<T>{
	private Object[] item;
	
	private int length = 16;

	public Ring(int len) {
		//判断len 是否是正整数 && 是否是2的幂
		if(len<=0||(len & (len-1))!=0) {
			throw new IllegalArgumentException();
		}
		this.length = len;
		item = new Object[length];
	}
	@SuppressWarnings("unchecked")
	public T take(long seqence){
		int i =(int) (seqence & (length-1));
		Object o = item[i];
		return (T) o;
	}
	
}
